// m

// 给定一个链表和整数k，将链表每个节点向右移动k个位置

// 思路
// 我们可以将链表先连成环，然后将链表在指定位置断开
// 遍历一遍，求出链表节点个数n，k可能很大，但是我们只需要将链表右移k % n个位置即可
// 遍历到n - k  % n的位置，记录下断开后新链表头节点的位置，再将其断开并返回新的头节点

// 1,2,3,4,5  k = 2
// 1,2,3   4,5 (4,5,1,2,3)
const { ListNode, LinkedList } = require('../../1. 链表基础/1. 建立线性链表')
function rotateRight(head, k) {
    if (k === 0 || !head || !head.next) {
        return head
    }
    let count = 1
    let curr = head
    while (curr.next) { 
        count += 1
        curr = curr.next
    }
    let cut = count - k % count
    curr.next = head

    // 前面已经转过了 count次了，第二遍再走count - k次，相当于第一次的k次
    while (cut) {
        curr = curr.next
        cut -= 1
    }
    let newHead = curr.next
    curr.next = null
    return newHead
}

let head = [0,1,2,3,5], k = 4
let node = new LinkedList(head)
let res = rotateRight(node.head, 4)
console.log(res)